#include <unistd.h>
#include <iostream>
#include <signal.h>
using namespace std;
void Print(sigset_t pend_message)
{
    cout << "pending : "; 
    for(int i = 31; i > 0; --i)
    {
        //信号在pending里
        if(sigismember(&pend_message, i))
            cout << '1';
        //不在
        else
            cout << '0';
    }
    cout << endl;
}
void hander(int sign)
{
    cout << "void hander(int sign)" << endl;
     //获取pending的位图信息
    sigset_t pend_message;
    sigemptyset(&pend_message);
    sigpending(&pend_message);
    Print(pend_message);
}
int main()
{
    signal(2, hander);
    //设定场景：屏蔽2号信号，我们发送2号信号时，未决信号集（pending）的标记位是否有2号信号
    //1. 定义一个信号集，用来代表信号屏蔽字
    sigset_t s, old_s;
    //先进行清0初始化
    sigemptyset(&s);
    sigemptyset(&old_s);
    //加入2号信号
    sigaddset(&s,2);
    //以上只是在用户态加入了2号信号，以下才是在内核态将2号sign加入信号屏蔽字中
    sigprocmask(SIG_BLOCK, &s, &old_s);

    //获取pending的位图信息
    sigset_t pend_message;
    sigemptyset(&pend_message);
    

    cout << "process pid : " << getpid() << endl;
    int count = 20;
    while(count--)
    {
        //获取pending的信息
        sigpending(&pend_message);
        Print(pend_message);
        if(count == 10)
        {
            sigprocmask(SIG_UNBLOCK, &s, &old_s);
        }
        sleep(1);
    }


    return 0;
}